package nl.hu.vakantievibes.server;

import java.util.ArrayList;
import java.util.Date;

import nl.hu.vakantievibes.client.ServerCallInterface;
import nl.hu.vakantievibes.domain.Boeking;
import nl.hu.vakantievibes.domain.Carpool;
import nl.hu.vakantievibes.domain.Gebruiker;
import nl.hu.vakantievibes.domain.Reis;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;

public class ServerCallImpl extends RemoteServiceServlet implements ServerCallInterface {
	private static final long serialVersionUID = 1L;
	@Override
	public Gebruiker processLogin(String username, String password) {
		for(Gebruiker g : AlleGebruikers.get().getGebruikers()) {
			if(g.getGebruikersNaam().equals(username) && g.getWachtWoord().equals(password)) {
				return g;
			}
		}
		return null;
	}
	@Override
	public boolean registerUser(String username, String password) {
		for(Gebruiker g : AlleGebruikers.get().getGebruikers()) {
			if(g.getGebruikersNaam().equals(username)) {
				return false;
			}
		}
		return AlleGebruikers.get().addGebruiker(username, password);
	}
	@Override
	public boolean setAdmin(String geb, boolean b) {
		Gebruiker g = AlleGebruikers.get().getGebruiker(geb);
		if(g == null) {
			return false;
		} else {
			g.setAdmin(b);
			return true;
		}
	}
	@Override
	public boolean setCarpoolStatus(Carpool cP, String s) {
		for(Carpool c : AlleCarpools.get().getCarpools()){
			if(c.equals(cP)){
				Boeking b = AlleBoekingen.get().zoekBoeking(c.getEigenaar(), c.getReis());
				if(s.equals("Geaccepteerd") && b.getZitPlaatsen() > 0) {
					c.setStatus(s);
					b.verlaagZitPl();
					return true;
				} else if(s.equals("Geweigerd")){
					c.setStatus(s);
					return true;
				}else if(s.equals("Geannuleerd")){
					c.setStatus(s);
					return true;
				}else{
					return false;
				}
			}
		}
		return false;
	}
	@Override
	public boolean annuleerBoeking(Boeking bA) {
		for(Boeking b : AlleBoekingen.get().getBoekingen()){
			if(b.equals(bA)){
				for(Carpool c : AlleCarpools.get().getCarpools()){
					if(c.getEigenaar().equals(b.getDeGebruiker()) && c.getReis().equals(b.getDeReis())){
						System.out.println(c.getEigenaar().getNaam());
						boolean bo;
						bo = setCarpoolStatus(c, "Geannuleerd");
						System.out.println(bo);
						if(bo) return AlleBoekingen.get().getBoekingen().remove(b);
						else return false;
					}else{
						return AlleBoekingen.get().getBoekingen().remove(b);
					}
				}
			}
		}
		return false;
	}
	@Override
	public ArrayList<Reis> getAlleReizen() {
		return AlleReizen.get().getReizen();
	}
	@Override
	public Reis zoekReis(String naam) {
		for(Reis r : AlleReizen.get().getReizen()) {
			if(r.getNaam().equals(naam)) return r;
		}
		return null;
	}
	@Override
	public boolean addReis(String nm, String ld, String ps, double prs, Date vdtm, Date adtm, String oms) {
		return AlleReizen.get().addReis(nm, ld, ps, prs, vdtm, adtm, oms);
	}
	@Override
	public boolean addBoeking(Reis r, Gebruiker g, String nm, String tus, String an, String strn,
			String hn, String wp, String pc, String em, int tel, int dag, int maand, int jaar,
			boolean a, boolean f, int zPl, int fPl) {

		g.setGegevens(nm, tus, an, dag, maand, jaar, wp, pc, strn, hn, tel, em);

		return AlleBoekingen.get().addBoeking(g, r, a, f, zPl, fPl);
	}
	@Override
	public ArrayList<Boeking> getAlleBoekingen() {
		return AlleBoekingen.get().getBoekingen();
	}
	@Override
	public boolean verstuurBericht(Gebruiker bestuurder, Gebruiker passagier, Reis r, String bericht) {
		Carpool c = new Carpool(bestuurder, passagier, r, bericht);
		return AlleCarpools.get().addCarpool(c);
	}
	@Override
	public ArrayList<Carpool> getAlleCarpools(Gebruiker g) {
		return AlleCarpools.get().getCarpools(g);
	}
	@Override
	public ArrayList<Carpool> getAlleCarpoolsPas(Gebruiker g) {
		return AlleCarpools.get().getCarpoolsPas(g);
	}

}
